package algorithms.leaning.class14;

import common.util.MyUtil;

import java.util.ArrayList;
import java.util.List;

/**
 * 一些项目要占用一个会议室宣讲，会议室不能同时容纳两个项目的宣讲。
 * 给你每一个项目开始的时间和结束的时间
 * 你来安排宣讲的日程，要求会议室进行的宣讲的场次最多。
 * 返回最多的宣讲场次。
 *
 * @author guichang
 * @date 2021/6/13
 */

@SuppressWarnings("all")
public class Code1_贪心_会议的最大数量 {

    public static void main(String[] args) {
        int[][] meeting = {{1, 8}, {3, 4}, {2, 5}, {6, 90}};
        MyUtil.print(maxMeeting(meeting));
    }

    public static int maxMeeting(int[][] meeting) {
        if (meeting == null) {
            return 0;
        }
        List<Meeting> ms = new ArrayList<>(meeting.length);
        for (int[] m : meeting) {
            ms.add(new Meeting(m[0], m[1]));
        }
        // 按结束时间从小到大排序
        ms.sort((a, b) -> a.end - b.end);
        int max = 0;
        int endTime = 0;
        for (Meeting m : ms) {
            if (m.start >= endTime) {
                max++;
                endTime = m.end;
            }
        }
        return max;
    }

    /**
     * 新建一个内部对象用于排序
     */
    private static class Meeting {
        int start;
        int end;

        public Meeting(int start, int end) {
            this.start = start;
            this.end = end;
        }
    }

}